Controllo MQTT programmato
Il controllo MQTT programmato è destinato ai messaggi programmati in anticipo. Per il controllo live, vedere invece Controllo MQTT Live.
Questa guida ti aiuterà a configurare MQTT sul tuo DemoBrandName ControllerDemoName per controllare e monitorare a distanza le installazioni di batterie e pannelli solari.
Cosa ti serve
- DemoBrandName ControllerDemoName con connettività Internet.
- Credenziali MQTT: Queste possono essere richieste inviando un'email a support@eniris.be.
- Ambiente di sviluppo Python (o qualsiasi altro client MQTT). Questa guida utilizza un esempio di base scritto in Python per farti iniziare con MQTT e l'invio di comandi. Ti consigliamo di usare Python per facilità d'uso, ma è supportato qualsiasi altro client MQTT.
Informazioni aggiuntive
MQTT è un protocollo di comunicazione veloce su Internet. È un sistema di messaggistica di pubblicazione/sottoscrizione, che consente una connessione diretta tra la tua macchina e il DemoBrandName ControllerDemoName. I tuoi asset sono classificati in gruppi di solare, batteria, EV e HVAC. Al momento, questa integrazione consente il controllo per gruppo, non per dispositivo.
Configurazione per la prima volta (Punto di partenza per nuovi utenti)
Ho un DemoBrandName ControllerDemoName che vorrei configurare per il Controllo Remoto MQTT.
1. Controlla la tua rete
Assicurati che la tua rete consenta il traffico di rete mqtt sulla porta 1883. Puoi farlo utilizzando il comando:
nc -zv mqtt.eniris.be 1883
Quando questo comando non è disponibile, puoi alternativamente scaricare ed eseguire questo codice python.
In caso di dubbi, consulta il tuo ingegnere di rete o usa temporaneamente l'hotspot 4G/5G del tuo telefono quando si verificano errori di connessione.
Quando la porta 1883 non è accessibile dalla tua rete, offriamo un backup sulla porta 80. Questo può essere configurato nel tuo client MQTT in un passaggio successivo di questo manuale.
2. Aggiungi i tuoi dispositivi
Accedi all'interfaccia di commissioning e assicurati che i dispositivi siano aggiunti al DemoBrandName ControllerDemoName.
3. Aggiungi il segnale esterno MQTT



4. Abilita il segnale remoto MQTT
Seleziona tutti i dispositivi che desideri includere nel Controllo Remoto MQTT.

5. Il segnale remoto è stato aggiunto
L'interfaccia di Controllo Remoto MQTT è stata ora attivata sul DemoBrandName ControllerDemoName.
Ora siamo pronti a inviare alcuni comandi di base utilizzando un semplice esempio. La colonna Stato ti dice se un comando è attivo.
Script di demo Python
Un buon primo punto di partenza sarebbe testare la tua nuova integrazione configurata con un semplice esempio.
Questo codice di test svolge un compito semplice di inviare continuamente il seguente programma:
- Batteria: Carica a 5 kW per 15 minuti ogni 10 minuti
- Solare: Imposta la potenza a 0 kW per un'ora ogni 30 minuti
Il DemoBrandName ControllerDemoName risponde con un messaggio di riconoscimento contenente l'identificatore univoco del programma, oppure un messaggio di errore.
Recuperiamo quindi il programma successivo per entrambi i tipi di dispositivo, confermando che il comando è stato eseguito con successo.
Si prega di scaricare il file sottostante nel proprio IDE Python preferito. Compila il tuo numero di serie e le credenziali MQTT ed esegui lo script:
Quando quanto sopra ha successo, puoi continuare a inviare altri tipi di messaggi. Tutti i messaggi sono descritti di seguito.
Documentazione MQTT per l'invio di comandi
Questa sezione dettaglia il formato dei messaggi MQTT e i requisiti del payload per configurare il controllo programmato dei dispositivi all'interno della rete del DemoBrandName ControllerDemoName.
Argomenti MQTT
- Argomento di iscrizione:
standard1/rp_one_s/remoteScheduleMetrics/<controller SN> - Argomento di feedback:
standard1/outbound/remoteScheduleMetrics/feedback/<controller SN>
Dove <controller SN> deve essere sostituito con il numero di serie effettivo del DemoBrandName ControllerDemoName che intendi controllare.
Tipi di Messaggi MQTT
1. Imposta Programma (set_schedule)
Crea un nuovo programma per un tipo di dispositivo.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "set_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Opzionale),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint in watt>,
"site_import": <Importazione sito in watt>,
"site_export": <Esportazione sito in watt>,
"remove_overlap": <True/False> (Opzionale) (default=False),
"tag": <Tag String> (Opzionale) (default=None)
}
}
Risposta (Successo):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "set_schedule_ack",
"state": {
"schedule_id": <Schedule ID>,
"deleted_ids": <Schedulde IDs deleted if remove_overlap=True>,
"tag": <Tag String> (default=None)
},
"responseCode": 0
}
}
2. Imposta Programmi (set_schedules)
Crea più nuovi programmi.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "set_schedules",
"fields":
"0": '{
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Opzionale),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint in watt>,
"site_import": <Importazione sito in watt>,
"site_export": <Esportazione sito in watt>,
"remove_overlap": <True/False> (Opzionale) (default=False)
}',
"1": '{
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Opzionale),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Policy>",
"power_setpoint_w": <Setpoint in watt>,
"site_import": <Importazione sito in watt>,
"site_export": <Esportazione sito in watt>,
"remove_overlap": <True/False> (Opzionale) (default=False)
}',
...
}
Risposta (Successo):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "set_schedules_ack",
"state": {
"schedule_ids": <Schedule IDs>,
"deleted_ids": <Schedulde IDs deleted if remove_overlap=True>
},
"responseCode": 0
}
}
3. Ottieni Programma (get_schedule)
Recupera un programma specifico per ID.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedule",
"fields": {
"id": <Schedule ID>
}
}
Risposta:
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}
4. Ottieni Programmazione Attiva (get_active_schedule)
Recupera la programmazione attualmente attiva per un tipo di dispositivo.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_active_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Opzionale)
}
}
Risposta (Successo):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_active_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}
5. Ottieni Prossima Programmazione (get_next_schedule)
Recupera la prossima programmazione in arrivo per un tipo di dispositivo.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_next_schedule",
"fields": {
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Opzionale)
}
}
Risposta (Successo):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_next_schedule_ack",
"state": <Schedule>,
"responseCode": 0
}
}
6. Ottieni Programmazioni (get_schedules)
Recupera tutte le programmazioni per una data specifica.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_schedules",
"fields": {
"date": "<Date String of Format dd/mm/yyyy>"
}
}
Risposta (Successo):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_schedules_ack",
"state": {
"schedules": [<Schedule>, ...]
},
"responseCode": 0
}
}
7. Ottieni Programmazioni Future (get_future_schedules)
Recupera tutte le programmazioni future.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_future_schedules",
"fields": {}
}
Risposta (Successo):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_future_schedules_ack",
"state": {
"schedules": [<Schedule>, ...]
},
"responseCode": 0
}
}
8. Rimuovi Programmazione (remove_schedule)
Rimuove una programmazione specifica tramite ID.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "remove_schedule",
"fields": {
"id": <Schedule ID>
}
}
Risposta (Successo):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "remove_schedule_ack",
"state": "Programmazione <Schedule ID> rimossa con successo",
"responseCode": 0
}
}
9. Ottieni Feedback sul Sito (get_feedback)
Recupera feedback dettagliati sulla stato del sistema.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_feedback",
"fields": {
"device": <Device (node) level>
}
}
Risposta (Successo):
Struttura del Payload di Feedback
10. Topologia del Sito (get_toplogy)
Ottiene la topologia del sito.
{
"extraTags": {
"nodeId": "<Controller SN>_site_0"
},
"time": <Unix Timestamp>,
"message_type": "get_topology",
"fields": {}
}
Risposta (Successo):
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "get_topology_ack",
"state": {
"nodeId": <nodeId>,
"nodeType": <nodeType>,
"nomCurrent": <nominalCurrent>,
"children": [{<ChildObject>}]
},
"responseCode": 0
}
}
Formato di Risposta Standard per la Programmazione
{
"id": <Schedule ID>,
"device_type": "<Device Type>",
"node_id": "<Node ID>" (Opzionale),
"start_time": <Unix Timestamp>,
"end_time": <Unix Timestamp>,
"policy": "<Schedule Policy>",
"power_setpoint_w": <Setpoint in watts>,
"created_at": <Unix Timestamp>
}
Tipi di Componenti e Politiche
Per dettagli sui componenti disponibili e sulle politiche che possono essere programmate, fare riferimento alla sezione Componenti e Politiche MQTT nella documentazione di Controllo MQTT Live.
Le programmazioni specifiche per dispositivi possono essere inviate utilizzando il campo node_id opzionale, che si riferisce all'ID del nodo del dispositivo controllabile.
Gestione degli Errori
Tutti i messaggi possono restituire una risposta di errore con responseCode: 1 quando si verifica un errore:
{
"requestTime": <Unix Timestamp>,
"time": <Unix Timestamp>,
"siteNodeId": "<Controller SN>_site_0",
"data": {
"message_type": "<Message Type>_ack",
"error": <Error Body>,
"responseCode": 1
}
}
Quando si verifica un errore non correlato, il tipo di messaggio sarà (general_error).
Gli errori comuni includono:
- Sovrapposizione della programmazione con programmazioni esistenti
- Intervallo di tempo non valido
- Tipo di dispositivo non trovato
- ID programmazione non trovato
- Politica non valida per tipo di dispositivo
Regole di Gestione della Programmazione
- Regole di Sovrapposizione
- Le programmazioni non possono sovrapporsi per lo stesso tipo di dispositivo.
- Le programmazioni non possono sovrapporsi per lo stesso dispositivo.
- Le programmazioni per lo stesso dispositivo e tipo di dispositivo non possono sovrapporsi.
- Le programmazioni esistenti e sovrapposte saranno eliminate se la variabile
remove_overlapè impostata suTruedurante la creazione di una nuova programmazione.
- Ogni programmazione deve avere:
- Un tipo di dispositivo valido.
- Un orario di inizio (timestamp Unix).
- Un orario di fine (timestamp Unix).
- Una politica (che corrisponde alle politiche disponibili per il tipo di dispositivo).
- Un setpoint di potenza (per le politiche che lo richiedono).
- L'orario di inizio deve essere precedente all'orario di fine.
- Se l'orario di inizio è nel passato, viene automaticamente cambiato per iniziare ora.
- Le programmazioni possono essere eliminate solo se non sono ancora iniziate. Le programmazioni attive non possono essere eliminate.
- Le programmazioni possono essere impostate per diversi tipi di dispositivo in modo indipendente.
- Il sistema applica automaticamente la politica appropriata quando una programmazione diventa attiva.